我們繼續看看山陀兒颱風警報的資料吧。
認識了 slice 和 split之後,我們取得資料的 jq 主程式如下:
jq -c '[.records.tropicalCyclones.tropicalCyclone[] | select(.typhoonName=="KRATHON") | .analysisData.fix[] | [.fixTime[0:13], (.coordinate|split(",")[0]), (.coordinate|split(",")[1]), .pressure, .maxWindSpeed, .maxGustSpeed, .movingDirection, .movingPrediction[0].value]][]'
jq -c "[.records.tropicalCyclones.tropicalCyclone[] | select(.typhoonName==\"KRATHON\") | .analysisData.fix[] | [.fixTime[0:13], (.coordinate|split(\",\")[0]), (.coordinate|split(\",\")[1]), .pressure, .maxWindSpeed, .maxGustSpeed, .movingDirection, .movingPrediction[0].value]][]"
接下來,我希望這些資訊呈現的樣子更簡潔一點,尤其在 terminal 當中,可以清楚看各欄資訊。jq 正好有內建合適的工具–– @tsv
💡
輸入陣列後,使用 | @tsv
,這個函式會幫助我們使用 tab 分隔字串格式呈現,也就是以TSV (tab-separated values)呈現。陣列的每個元素會用一行呈現,元素內的每個值則會用 tab 分隔。
以底下這個字串陣列為例:
["一天", "有一盤小菜", "在路上走著走著", "就被端走了"]
| @tsv
結果為 "一天\t有一盤小菜\t在路上走著走著\t就被端走了"
❗ 我們要的是 tab 分隔,但是這個結果被轉為字串了? |
---|
💡 | 回顧 Day11: jq 線上工具 jqplay 介紹的時候,有些參數可以使用。 |
---|---|
-r |
Raw Output: 將輸出的資料視為一般文字,不會解析成JSON,外層如果是字串不會加上引號 |
| @tsv
搭配 -r
結果為 一天 有一盤小菜 在路上走著走著 就被端走了
✨ 這就是我們要的 tab 分隔,可以直接作為 颱風消息與警報-熱帶氣旋路徑 的顯示格式 ✨ |
---|
現在可以修改我們取得資料的 jq 主程式,加上標題、顯示最後5筆,如下:
jq -c -r '["時間 ","經度","緯度","氣壓","風速MAX","陣風MAX","方向 ","預測"],[.records.tropicalCyclones.tropicalCyclone[] | select(.typhoonName=="KRATHON") | .analysisData.fix[-5:][] | [.fixTime[0:13], (.coordinate|split(",")[0]), (.coordinate|split(",")[1]), .pressure, .maxWindSpeed, .maxGustSpeed, .movingDirection, .movingPrediction[0].value]][] | @tsv'
jq -c -r " [\"時間 \",\"經度\",\"緯度\",\"氣壓\",\"風速MAX\",\"陣風MAX\",\"方向 \",\"預測\"],[.records.tropicalCyclones.tropicalCyclone[] | select(.typhoonName==\"KRATHON\") | .analysisData.fix[-5:][] | [.fixTime[0:13], (.coordinate|split(\",\")[0]), (.coordinate|split(\",\")[1]), .pressure, .maxWindSpeed, .maxGustSpeed, .movingDirection, .movingPrediction[0].value]][] | @tsv"
修改後,比較成果如下對照:
陣列 | |
---|---|
tab分隔 |
今天認識了 @tsv
, @tsv
讓我們整理好的文字陣列資料 能以 tab 做分隔的格式來輸出,終於在 terminal 終能清楚顯示。可參考 原始碼 。
颱風天,注意安全。擔心可能會停電,於是就早點發文。感謝自己認真的學習。